home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / Beep.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  3KB  |  129 lines

  1. /*
  2. **    Beep.c
  3. **
  4. **    Simple beep sound support routine
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16.     /* Beep():
  17.      *
  18.      *    Produce a simple decent beep sound.
  19.      */
  20.  
  21. VOID
  22. Beep()
  23. {
  24.     if(SoundConfig.Volume)
  25.     {
  26.         struct MsgPort *AudioPort;
  27.  
  28.             /* Create the IO reply port. */
  29.  
  30.         if(AudioPort = (struct MsgPort *)CreateMsgPort())
  31.         {
  32.             struct IOAudio *AudioRequest;
  33.  
  34.                 /* Create the audio IO info. */
  35.  
  36.             if(AudioRequest = (struct IOAudio *)CreateIORequest(AudioPort,sizeof(struct IOAudio)))
  37.             {
  38.                 STATIC UBYTE AnyChannel[] =
  39.                 {
  40.                     LEFT0F,LEFT1F,    RIGHT0F,RIGHT1F
  41.                 };
  42.  
  43.                 AudioRequest->ioa_Request.io_Command                = ADCMD_ALLOCATE;
  44.                 AudioRequest->ioa_Request.io_Flags                    = ADIOF_NOWAIT | ADIOF_PERVOL;
  45.                 AudioRequest->ioa_Request.io_Message.mn_Node.ln_Pri    = 127;
  46.                 AudioRequest->ioa_Data                                = AnyChannel;
  47.                 AudioRequest->ioa_Length                            = sizeof(AnyChannel);
  48.  
  49.                     /* Open audio.device */
  50.  
  51.                 if(!OpenDevice(AUDIONAME,0,(struct IORequest *)AudioRequest,0))
  52.                 {
  53.                         /* Minimal sine wave. */
  54.  
  55.                     STATIC BYTE SineWave[8] =
  56.                     {
  57.                          90,
  58.                          127,
  59.                          90,
  60.                          0,
  61.                         -90,
  62.                         -127,
  63.                         -90,
  64.                          0
  65.                     };
  66.  
  67.                     BYTE *Wave;
  68.  
  69.                     if(Wave = AllocMem(sizeof(SineWave),MEMF_CHIP))
  70.                     {
  71.                         CopyMem(SineWave,Wave,sizeof(SineWave));
  72.  
  73.                             /* Prepare to play a beep sound. */
  74.  
  75.                         AudioRequest->ioa_Request.io_Command    = CMD_WRITE;
  76.                         AudioRequest->ioa_Request.io_Flags        = ADIOF_PERVOL;
  77.                         AudioRequest->ioa_Period                = SysBase->ex_EClockFrequency / 3200;
  78.                         AudioRequest->ioa_Volume                = (SoundConfig.Volume * (64 / 2)) / 100;
  79.                         AudioRequest->ioa_Cycles                = 150;
  80.                         AudioRequest->ioa_Data                    = Wave;
  81.                         AudioRequest->ioa_Length                = sizeof(SineWave);
  82.  
  83.                             /* Play it. */
  84.  
  85.                         BeginIO((struct IORequest *)AudioRequest);
  86.                         WaitIO((struct IORequest *)AudioRequest);
  87.  
  88.                         FreeMem(Wave,sizeof(SineWave));
  89.                     }
  90.  
  91.                         /* Close audio.device */
  92.  
  93.                     CloseDevice((struct IORequest *)AudioRequest);
  94.                 }
  95.  
  96.                     /* Free the audio request. */
  97.  
  98.                 DeleteIORequest((struct IORequest *)AudioRequest);
  99.             }
  100.  
  101.                 /* Free the IO reply port. */
  102.  
  103.             DeleteMsgPort(AudioPort);
  104.         }
  105.     }
  106. }
  107.  
  108.     /* BellSignal():
  109.      *
  110.      *    Your whole bell signal routine (visible + audible).
  111.      */
  112.  
  113. VOID
  114. BellSignal()
  115. {
  116.         /* Handle the visual part. */
  117.  
  118.     if(Config->TerminalConfig->BellMode != BELL_AUDIBLE)
  119.     {
  120.         if(StatusProcess)
  121.             Signal((struct Task *)StatusProcess,SIG_BELL);
  122.     }
  123.  
  124.         /* Let it beep. */
  125.  
  126.     if(Config->TerminalConfig->BellMode == BELL_AUDIBLE || Config->TerminalConfig->BellMode == BELL_BOTH)
  127.         SoundPlay(SOUND_BELL);
  128. }
  129.